#pragma once

#include  "iostream"
#include  "vector"
#include  "stack"
#include  "unordered_map"
#include   "queue"

using namespace std;

//s = "adceb"
//p = "*a*b" https://leetcode.cn/problems/wildcard-matching/
bool isMatch(string s, string p) {
    int sn = s.size();
    int pn = p.size();
    int i = 0, j = 0;//i代表原始字符串 j代表需要匹配的字符串下标
    int start = -1;//*位置模式串
    int match = -1;//匹配*使用 匹配串
    while (i < sn) {
        if (j < pn && s[i] == p[j] || p[j] == '?') {
            j++;
            i++;
        } else if (j < pn && p[j] == '*') {
            start = j;//下面模式串开始
            match = i;//需要匹配的串开始 这个不能直接++
            j = j + 1;//模式串+1跳过*

        } else if (start != -1) {
            //主串开始向后走
            match++;
            i = match;
            j = start + 1;
        } else
            return false;


    }

    //表明模式串没走完但是住串走完了
    while (j < p.length() && p[j] == '*')
        j++;


    return j == p.length();//说明走到了尽头
}